package com.edu.exam.enums.quality.monitoring;

/**
 * 投递状态枚举
 * 
 * <p>定义通知投递的状态分类。</p>
 * 
 * @author 系统生成
 * @version 1.0
 * @since 2025-11-10
 */
public enum DeliveryStatus {
    
    /**
     * 待投递
     * <p>通知等待投递。</p>
     */
    PENDING("待投递", "通知等待投递"),
    
    /**
     * 投递中
     * <p>通知正在投递过程中。</p>
     */
    IN_PROGRESS("投递中", "通知正在投递过程中"),
    
    /**
     * 已投递
     * <p>通知已成功投递。</p>
     */
    DELIVERED("已投递", "通知已成功投递"),
    
    /**
     * 投递失败
     * <p>通知投递失败。</p>
     */
    FAILED("投递失败", "通知投递失败"),
    
    /**
     * 已重试
     * <p>通知投递失败后已重试。</p>
     */
    RETRIED("已重试", "通知投递失败后已重试"),
    
    /**
     * 已取消
     * <p>通知投递已被取消。</p>
     */
    CANCELLED("已取消", "通知投递已被取消");
    
    private final String displayName;
    private final String description;
    
    DeliveryStatus(String displayName, String description) {
        this.displayName = displayName;
        this.description = description;
    }
    
    public String getDisplayName() {
        return displayName;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 根据显示名称获取枚举
     * 
     * @param displayName 显示名称
     * @return 对应的枚举值
     */
    public static DeliveryStatus fromDisplayName(String displayName) {
        for (DeliveryStatus status : values()) {
            if (status.getDisplayName().equals(displayName)) {
                return status;
            }
        }
        return PENDING;
    }
    
    /**
     * 判断是否为进行中状态
     * 
     * @return 如果是进行中状态返回true
     */
    public boolean isInProgress() {
        return this == PENDING || this == IN_PROGRESS;
    }
    
    /**
     * 判断是否为完成状态
     * 
     * @return 如果是完成状态返回true
     */
    public boolean isCompleted() {
        return this == DELIVERED || this == FAILED || this == CANCELLED;
    }
    
    /**
     * 判断是否为成功状态
     * 
     * @return 如果是成功状态返回true
     */
    public boolean isSuccessful() {
        return this == DELIVERED;
    }
}